#include <stdio.h>
// 函数直接或间接调用自己的情况，就是递归调用。 recursive
// 递归是比较接近自然语言特性的一种调用方式。
// 递归必须要有合理的出口，不然会挂掉。

// 递归起始条件 getAge(n) 有使递归趋于结束的语句 getAge(--n) 递归终止条件 n == 1
int getAge(int n)
{
    if (n == 1)
    {
        return 10;
    }
    else {
        return getAge(n - 1)+2;
    }
}

int peachCount(int day)
{
    if(day == 10)
    {
        return 1;
    }
    else {
        return (peachCount(day + 1) + 1) * 2;
    }
}

// 注意递归条件参不参与运算
int factorial(int n)
{
    if (n == 0)
    {
        return 1;
    }
    else {
        return n * factorial(n - 1);
    }
}

void fun(int i)
{
    if (i > 0)
    {
        fun(i/2);
    }
    printf("%d\n",i);
}
int main()
{
//    int age = getAge(5);
//    printf("Age = %d\n",age);

//    int CountOfPeach = peachCount(1);
//    printf("Count = %d\n",CountOfPeach);

//    int fact = factorial(5);
//    printf("fact = %d\n",fact);

    fun(10);
    return 0;
}
